
import { NgModule } from '@angular/core';// angular核心模块
import { BrowserModule } from '@angular/platform-browser';// 浏览器解析的模块
import { FormsModule } from '@angular/forms'; // NgModel lives here
// HttpClient 是 Angular 通过 HTTP 与远程服务器通讯的机制。
import { HttpClientModule } from '@angular/common/http';//启用 HTTP 服务

// 组件
import { AppComponent } from './app.component';
import { HeroesComponent } from './heroes/heroes.component';
import { HeroDetailComponent } from './hero-detail/hero-detail.component';
import { MessagesComponent } from './messages/messages.component';
import { DashboardComponent } from './dashboard/dashboard.component';

import { AppRoutingModule } from './app-routing.module';

// 使用 内存 Web API（In-memory Web API） 模拟出的远程数据服务器通讯。
import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService } from './in-memory-data.service';
import { HeroSearchComponent } from './hero-search/hero-search.component';

// 装饰器，接受一个元数据对象，告诉angular如何编译启动应用
@NgModule({
  declarations: [/* 项目运行组件*/
    AppComponent,
    HeroesComponent,
    HeroDetailComponent,
    MessagesComponent,
    DashboardComponent,
    HeroSearchComponent
  ],

  imports: [/* 这里是该应用所需外部模块的列表*/
    BrowserModule,
    FormsModule,
    AppRoutingModule,
    HttpClientModule,
    // forRoot() 配置方法接收一个 InMemoryDataService 类来初始化内存数据库。
    HttpClientInMemoryWebApiModule.forRoot(
      InMemoryDataService, { dataEncapsulation: false }
    )
  ],
  providers: [], /* 项目配置所需服务 */
  bootstrap: [AppComponent] /**主视图 根组件 */
})

// 根组件不需要导出任何东西，因为其他组件不需要导入根组件
export class AppModule { }
